package com.atguigu.cm.util

import org.apache.spark.{SparkConf, SparkContext}

/**
 * 获取sparkContext工具类
 * author 剧情再美终是戏
 * mail 13286520398@163.com
 * date 2020/1/8 19:21
 * version 1.0
 **/
object MySparkContextCMUtil {


  /**
   * 获取sparkContext
   *
   * author 剧情再美终是戏
   * date 2020/1/8 19:44
   *
   * @param args main方法入参,格式为name::value,以::拼接
   * @return org.apache.spark.SparkContext
   *         version 1.0
   **/
  def get(args: Array[String]): SparkContext = {
    get(args = args, isLocal = true)
  }

  /**
   * 获取sparkContext
   *
   * author 剧情再美终是戏
   * date 2020/1/9 7:37
   *
   * @param args    args main方法入参,格式为name::value,以::拼接
   * @param isLocal 是否本地模式
   * @return void
   *         version 1.0
   **/
  def get(args: Array[String], isLocal: Boolean): SparkContext = {
    // 1、创建sparkContext
    val conf = new SparkConf().setAppName("RddDemo")
    if (isLocal) {
      conf.setMaster("local[*]") // 默认情况下走本地模式
    }

    // 如果参数不为空，就设置初始化sparkContext的配置文件
    if (null != args && args.length > 0) {
      for (ag <- args) {
        if (null != ag) {
          val splits = ag.split("::")
          if (null != splits && splits.length == 2) {
            conf.set(splits(0), splits(1))
          }
        }
      }
    }
    // 返回sparkContext
    new SparkContext(conf)
  }

  /**
   * 关闭sparkContext资源
   *
   * author 剧情再美终是戏
   * date 2020/1/8 19:33
   *
   * @param sc sparkContext
   * @return void
   *         version 1.0
   **/
  def close(sc: SparkContext): Unit = sc match {
    case null => None
    case _ => sc.stop
  }

}
